package com.greensock
{
	import flash.display.DisplayObject;
	import flash.events.Event;
	

	public class TweenMove
	{
		/**
		 * 监听帧的物件 
		 */		
		private var __displayObj:DisplayObject;
		
		/**
		 * 操作的对象 
		 */		
		private var __target:Object;
		
		/**
		 * 代表每一帧调用的函数 
		 */		
		private var __onUpdate:Function;
		
		/**
		 * 代表移动完毕后调用的函数 
		 */		
		private var __onComplete:Function;
		
		/**
		 * 总共消耗的帧数 
		 */		
		private var __totalFrame:int;
		
		/**
		 * 当前帧 
		 */		
		private var __currentFrame:int;
		
		/**
		 * x,y速度 
		 */		
		private var __speedX:Number;
		private var __speedY:Number;
		
		public function TweenMove()
		{
			
		}
		
		/**
		 * 开始移动 
		 * @param _displayObj, 需要移动的物件
		 * @param _time,  移动消耗的时间
		 * @param _infoObj, x,y代表目标点, onUpdate代表每一帧调用的函数，onComplete代表移动完毕后调用的函数
		 * 
		 */		
		public function to(_displayObj:DisplayObject, _target:Object, _time:Number, _infoObj:Object):void
		{
//			if(!_displayObj.stage || _time == 0) return;
			if(_time == 0)
			{
				throw Error("com.greensock-->TweenMove-->移动时time时间不能为0");
			}
			if(!_displayObj.stage) return;
			__displayObj = _displayObj;
			__target = _target;
			__onUpdate = _infoObj.onUpdate;
			__onComplete = _infoObj.onComplete;
			__totalFrame = int(_displayObj.stage.frameRate * _time);
			if(__totalFrame == 0) __totalFrame = 1;			
			
			__speedX = (Math.round(_infoObj.x) - Math.round(_target.x)) / __totalFrame;
			__speedY = (Math.round(_infoObj.y) - Math.round(_target.y)) / __totalFrame;
			__displayObj.addEventListener(Event.ENTER_FRAME, move, false, 0, true);
		}
		
		/**
		 * 停止移动 
		 * 
		 */		
		public function stop():void
		{
			__displayObj.removeEventListener(Event.ENTER_FRAME, move);
			
			if(__onComplete != null)
			{
				__currentFrame = 0;
				__onComplete();
			}
			
//			__onUpdate = null;
//			__onComplete = null;	
		}
		
		/**
		 * 移动 
		 * @param e
		 * 
		 */		
		private function move(e:Event):void
		{
			if(__onUpdate != null)
			{
				__onUpdate();
			}
			
			__target.x += __speedX;
			__target.y += __speedY;
			
			__currentFrame++;
			if(__currentFrame == __totalFrame)
			{
				stop();
			}
		}
	}
}